// dp[j][k]代表编写了j行代码并产生了k个bug的方案数
#include <bits/stdc++.h>
using namespace std;

const int MAXN = 505;
int n, m, b, mod;
int a[MAXN];
int dp[MAXN][MAXN];

int main()
{
	cin >> n >> m >> b >> mod;

	for (int i = 1; i <= n; i++)
	{
		cin >> a[i];
	}

	dp[0][0] = 1;
	for (int i = 1; i <= n; i++)
	{
		for (int j = 0; j <= m; j++)
		{
			for (int k = 0; k <= b; k++)
			{
				if (j >= 1 && k >= a[i])
				{
					dp[j][k] = (dp[j][k] + dp[j - 1][k - a[i]]) % mod;
				}
			}
		}
	}

	int ans = 0;
	for (int i = 0; i <= b; i++)
	{
		ans = (ans + dp[m][i]) % mod;
	}

	cout << ans << endl;
	return 0;
}
